import {
  ArgumentsHost,
  Catch,
  ExceptionFilter,
  HttpException,
} from '@nestjs/common';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp(); // 获取请求上下文
    const response = ctx.getResponse(); // 获取请求上下文中的 response对象
    const status = exception.getStatus(); // 获取异常状态码
    console.log('exception', exception);
    // validator校验错误信息
    let validatorMessage = '';
    const exceptionResponse: any = exception.getResponse();
    console.log('exceptionResponse', exceptionResponse);
    if (typeof response === 'object') {
      const exceptionResponseMessageIsArray = Array.isArray(
        exceptionResponse.message,
      );
      //@ts-ignore
      validatorMessage = exceptionResponseMessageIsArray
        ? exceptionResponse.message[0]
        : exceptionResponse.message;
    }
    // 设置错误信息
    const message = exception.message
      ? exception.message
      : `${status >= 500 ? 'Service Error' : 'Client Error'}`;
    const errorResponse = {
      message: validatorMessage || message,
      code: status,
      success: false,
    };

    // 设置返回的状态码， 请求头，发送错误信息
    response.status(status);
    response.header('Content-Type', 'application/json; charset=utf-8');
    response.send(errorResponse);
  }
}
